
package com.hsnn.medstgmini.base.dict.controller;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Type;
import java.util.Enumeration;
import java.util.List;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.hsnn.medstgmini.Constants;
import com.hsnn.medstgmini.base.dict.model.DicDrugform;
import com.hsnn.medstgmini.base.dict.service.DicDrugformManager;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.util.Pagination;

/**
 * 基础库 数据字典 剂型字典 控制层
 * 
 * @author hss@njhsnn 2015年6月9日
 */
@Controller
@RequestMapping("/dicDrugform")
public class DicDrugformController {
	private static final Logger log = Logger.getLogger(DicDrugformController.class);
	@Autowired
	private DicDrugformManager dicDrugformManager;

	@Autowired
	private HttpServletRequest request;



	/**
	 * 基础库 数据字典 剂型字典 查询所有数据
	 * 
	 * @param request
	 * @param response
	 * @throws IOException
	 */
	@RequestMapping(value = "/dicDrugformListJsp")
	public String goToDicDrugformListJsp(){
		return "/base/dict/drugFormList";
	}

	/**
	 * 基础库 数据字典 剂型字典 查询及条件查询
	 * 
	 * 用来封装json
	 * 
	 * @param request
	 * @param result
	 * @return
	 */
	@RequestMapping("/dicDrugformList")
	@ResponseBody
	public Pagination getDicDrugformList() {
		printParams();
		Pagination page = new Pagination(request);
		DicDrugform dicDrugform = new DicDrugform();
		try {
			String formCode = request.getParameter("formCode");
			String formName = request.getParameter("formName");
			String status = request.getParameter("status");
			dicDrugform.setFormCode(formCode);
			dicDrugform.setFormName(formName);
			if (StringUtils.isNotBlank(request.getParameter("status"))) {
				dicDrugform.setStatus(Short.parseShort(status));
			}
			Pagination data = dicDrugformManager.queryDicDrugformList(
					page, dicDrugform);
			return data;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		} catch (Error error) {
			error.printStackTrace();
			return null;
		}
		
	}
	/**
	 * 
	 *@category 批量启用停用
	 *@author wangbing
	 *@date 2015年6月9日
	 *Pagination
	 */
	@RequestMapping(value={"/enable","/disable"})
	@ResponseBody
	public Pagination batchChangeStatus(String array) {
		printParams();
		Pagination page = new Pagination();
		SysUser user = (SysUser) request.getSession().getAttribute(Constants.USERINFO);
		try {
			if (array != null && !"".equals(array)) {
				Gson gson = new Gson();
				Type type = new TypeToken<List<DicDrugform>>() {
				}.getType();
				List<DicDrugform> list = gson.fromJson(array, type);
				if (list != null && list.size()>0) {
					for (DicDrugform dds : list) {
						dds.setUpdUser(user.getId());
						dicDrugformManager.changeStatus(dds);
					}
					page.setSuccess(true);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			page.setSuccess(false);
		}
		return page;
	}
	/**
	 * 
	 *@category 查询编辑数据
	 *@author wangbing
	 *@date 2015年7月27日
	 *Pagination
	 */
	@RequestMapping("initEdit")
	@ResponseBody
	public Pagination initEdit() {
		printParams();
		Pagination page = new Pagination();
		if(StringUtils.isNotBlank(request.getParameter("formId"))){
			page.getConditions().put("formId", request.getParameter("formId").trim());
		}
		try {
			page = dicDrugformManager.initEdit(page);
			page.setSuccess(true);
		} catch (Exception e) {
			e.printStackTrace();
			page.setSuccess(false);
		}
		return page;
	}
	
	/**
	 * 
	 *@category 新增或编辑剂型
	 *@author wangbing
	 *@date 2015年7月27日
	 *Pagination
	 */
	@RequestMapping(value={"/add","/edit","/addTwo"})
	@ResponseBody
	public Pagination dicDrugformUpdate() {
		printParams();
		Pagination page = new Pagination();
		SysUser user = (SysUser) request.getSession().getAttribute(Constants.USERINFO);
		page.getConditions().put("updUser", user.getId());
		if(StringUtils.isNotBlank(request.getParameter("formCode"))){
			page.getConditions().put("formCode", request.getParameter("formCode").trim());
		}
		if(StringUtils.isNotBlank(request.getParameter("formName"))){
			page.getConditions().put("formName", request.getParameter("formName").trim());
		}
		if(StringUtils.isNotBlank(request.getParameter("formId"))){
			page.getConditions().put("formId", request.getParameter("formId").trim());
		}
		if(StringUtils.isNotBlank(request.getParameter("fatherId"))){
			page.getConditions().put("fatherId", request.getParameter("fatherId").trim());
		}else{
			page.getConditions().put("fatherId", "0");
		}
		try {
			if(request.getParameter("formId")!=null){
				if(StringUtils.isNotBlank(request.getParameter("formId"))){
					//update
					if(StringUtils.isNotBlank(request.getParameter("formCode"))){
		            	List<DicDrugform> list=dicDrugformManager.getFormBy("form_code",request.getParameter("formCode").trim(),request.getParameter("formId"));
		            	 if(list.size()>0){
		            		 page.setMsg("剂型编码已存在!");
		            		 page.setSuccess(false);
		            		 return page;
		                 }
		            }else{
		            	page.setMsg("请输入剂型编码!");
		            	page.setSuccess(false);
		            	return page;
		            }
		            if(StringUtils.isNotBlank(request.getParameter("formName").trim())){
		            	List<DicDrugform> list=dicDrugformManager.getFormBy("form_name",request.getParameter("formName").trim(),request.getParameter("formId"));
		            	 if(list.size()>0){
		            		 page.setMsg("剂型名称已存在!");
		            		 page.setSuccess(false);
		            		 return page;
		                 }
		            }else{
		            	page.setMsg("请输入剂型名称!");
		            	page.setSuccess(false);
		            	return page;
		            }
					dicDrugformManager.updateForm(page);
					page.setMsg("修改成功!");
					page.setSuccess(true);
				}else{
					//add
					if(StringUtils.isNotBlank(request.getParameter("formCode"))){
		            	List<DicDrugform> list=dicDrugformManager.getFormBy("form_code",request.getParameter("formCode").trim(),"");
		            	 if(list.size()>0){
		            		 page.setMsg("剂型编码已存在!");
		            		 page.setSuccess(false);
		            		 return page;
		                 }
		            }else{
		            	page.setMsg("请输入剂型编码!");
		            	page.setSuccess(false);
		            	return page;
		            }
		            if(StringUtils.isNotBlank(request.getParameter("formName").trim())){
		            	List<DicDrugform> list=dicDrugformManager.getFormBy("form_name",request.getParameter("formName").trim(),"");
		            	 if(list.size()>0){
		            		 page.setMsg("剂型名称已存在!");
		            		 page.setSuccess(false);
		            		 return page;
		                 }
		            }else{
		            	page.setMsg("请输入剂型名称!");
		            	page.setSuccess(false);
		            	return page;
		            }
		            String formAddId = UUID.randomUUID().toString();
		            page.getConditions().put("formAddId", formAddId);
		            if(!"0".equals(request.getParameter("fatherId"))){
		            	dicDrugformManager.addForm(page);
						page.setMsg("保存成功!");
						page.setSuccess(true);
		            }else{
		            	if(StringUtils.isNotBlank(request.getParameter("fformCode"))){
		            		page.getConditions().put("formCode", request.getParameter("fformCode").trim());
		            		page.getConditions().put("formName", request.getParameter("fformName").trim());
		            		dicDrugformManager.addForm(page);
		            		page.getConditions().put("formCode", request.getParameter("formCode").trim());
		            		page.getConditions().put("formName", request.getParameter("formName").trim());
		            		page.getConditions().put("formAddId", UUID.randomUUID().toString());
		            		page.getConditions().put("fatherId", formAddId);
		            		dicDrugformManager.addForm(page);
							page.setMsg("保存成功!");
							page.setSuccess(true);
		            	}else{
		            		dicDrugformManager.addForm(page);
							page.setMsg("保存成功!");
							page.setSuccess(true);
		            	}
		            }
					
				}
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			page.setMsg("保存失败!");
			page.setSuccess(false);
		}
		return page;
	}
	
	/**
	 * 
	 *@category 检查是否重复
	 *@author wangbing
	 *@date 2015年7月27日
	 *Pagination
	 */
	@RequestMapping("checkRepeat")
	@ResponseBody
	public Pagination checkRepeat() {
		printParams();
		Pagination page = new Pagination();
		String formCode = request.getParameter("formCode");
		String formName = request.getParameter("formName");
		
		try {
			 if(StringUtils.isNotBlank(formCode)){
	            	List<DicDrugform> list=dicDrugformManager.getFormBy("form_code",formCode.trim(),"");
	            	 if(list.size()>0){
	            		 page.setMsg("剂型编码已存在!");
	            		 page.setSuccess(false);
	            		 return page;
	                 }else{
	                	 page.setSuccess(true);
	                 }
	            }else{
	            	page.setMsg("请输入剂型编码!");
	            	page.setSuccess(false);
	            	return page;
	            }
	            if(StringUtils.isNotBlank(formName)){
	            	List<DicDrugform> list=dicDrugformManager.getFormBy("form_name",formName.trim(),"");
	            	 if(list.size()>0){
	            		 page.setMsg("剂型名称已存在!");
	            		 page.setSuccess(false);
	            		 return page;
	                 }else{
	                	 page.setSuccess(true);
	                 }
	            }else{
	            	page.setMsg("请输入剂型名称!");
	            	page.setSuccess(false);
	            	return page;
	            }
			
		} catch (Exception e) {
			e.printStackTrace();
			page.setMsg(e.toString());
			page.setSuccess(false);
		}
		return page;
	}
	
	
	/**
	 * 
	 *@category 获取参数打印
	 *@author 徐国鹏
	 *@date 2015年6月9日
	 *Pagination
	 */
	@SuppressWarnings("rawtypes")
	public void printParams(){
		Enumeration paramNames = request.getParameterNames();
		try {
			while (paramNames.hasMoreElements()) {
				String paramName = (String) paramNames.nextElement();
				String paramValue = request.getParameter(paramName);
				log.info(paramName+":"+paramValue);
			}
		} catch (Exception e) {
			log.error("",e);
		}
	}
	
	/**
	 * 
	 *@category 导出excel
	 *@author wangbing
	 *@date 2015年6月9日
	 *Pagination
	 */
	@RequestMapping("exportExcel")
	@ResponseBody
	public Pagination exportExcel(HttpServletResponse response,String fileName){
		printParams();
		Pagination page = new Pagination();
		String formCode = request.getParameter("formCode");
		String formName = request.getParameter("formName");
		String status = request.getParameter("status");
		if(StringUtils.isNotBlank(formCode)){
			page.getConditions().put("formCode", formCode.trim());
		}
		if(StringUtils.isNotBlank(formName)){
			page.getConditions().put("formName", formName.trim());
		}
		if(StringUtils.isNotBlank(status)){
			page.getConditions().put("status", status.trim());
		}
		try {
			response.addHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("GB2312"),"iso8859-1")); 
			OutputStream os= new BufferedOutputStream(response.getOutputStream());  
			 response.setContentType("application/vnd.ms-excel;charset=utf-8");  
			dicDrugformManager.exportExcel(page,os);
		} catch (Exception e) {
			page.setSuccess(false);
			e.printStackTrace();
		}
		return page;
	}
}
